package com.example.book.model;

import com.example.book.enums.ResultStatus;
import lombok.Data;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2024-12-16
 * Time: 10:40
 */

@Data
/*创建T泛型的时候类需要进行声明*/
public class Result<T> {
    /*
     * 通过文本告知前端问题不太好，用状态（业务）码*/
//    private int code; // 业务码200 成功 ， -1 失败 ， -2 未登录   // 有多种状态，不妨弄一个枚举类型，进行封装,返回类型为ResultStatus
    private ResultStatus code;
    private String errMsg;//希望返回的信息里面能说明登录的情况
//    给调用的方法类型在封装一层，写成泛型，就可以达有很好的代码复用性
//    private PageResult<BookInfo> pageResult;//Result封装PageResult，PageResult泛型中包含BookInfo
//    因为类型并不固定所以我们使用泛型
//    private T result;
    private T data;

    /*
    *用户没登录，进行代码封装复用 */
    public static Result nologin(){
        //说明未登录
        Result result = new Result();
        result.setCode(ResultStatus.NOLOGIN);
        result.setErrMsg("用户未登录");
        result.setData("null");//因为没登录所以可以不用设置报错信息
        return result;
    }

    /*
    *登录成功，接收图书信息，字符串，Boolean等类型，
    * 使用泛型，静态方法中也要声明 */
    public static <T> Result success(T data){
        Result result = new Result();
        result.setCode(ResultStatus.SUCCESS);
//        result.setErrMsg("用户登录成功");
        result.setData(data);
        return result;
    }

    /*还可以写一些别的信息
    * 登录失败*/
    public static <T> Result fail(String msg){
        Result result = new Result();
        result.setCode(ResultStatus.FAIL);
        result.setErrMsg(msg);
        return result;
    }

}
